package top.frsf.object;

import lombok.Data;

import java.awt.*;

/**
 * 游戏对象基类
 *
 * @author FRSF
 * @since 2025/8/1 12:42
 */
@Data
public class GameObject {
    /* 基础属性(坐标 + 长宽) */
    private int x;
    private int y;
    private int width;
    private int height;

    /* 图像 */
    private Image img;

    /**
     * 构造函数
     *
     * @param img    图片路径
     * @param x      X坐标
     * @param y      Y坐标
     * @param width  宽
     * @param height 高
     */
    public GameObject(String img, int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.img = Toolkit.getDefaultToolkit().getImage(img);
    }

    /**
     * 绘制自身游戏对象图像
     *
     * @param g 画笔
     */
    public void paintSelfImage(Graphics g) {
        g.drawImage(img, x, y, null);
    }

    /**
     * 绘制自身游戏对象矩形
     *
     * @param g 画笔
     */
    public void paintSelfRect(Graphics g) {
        g.drawRect(x, y, width, height);
    }

    /**
     * 获取自身游戏对象矩形
     *
     * @return 矩形
     */
    public Rectangle getRectangle() {
        return new Rectangle(x, y, width, height);
    }

    /**
     * 使用固定的HashCode，防止游戏对象修改导致Map集合get()出现null
     *
     * @return 哈希值
     */
    @Override
    public int hashCode() {
        return System.identityHashCode(this);
    }
}
